package com.gegewa.topic.router;

import org.aspectj.lang.JoinPoint;

/**
 * 执行dao方法之前的切面
 * 获取datasource对象之前往RouteHolder中指定当前线程数据源路由的key
 */
public class DataSourceAspect {
    /**
     * 在dao层方法之前获取datasource对象之前在切面中指定当前线程数据源路由的key
     */
    public void beforeDaoMethod(JoinPoint point)
    {
        //dao方法上配置的注解
        Object target = point.getTarget();
        Class<?>[] classz = target.getClass().getInterfaces();

        try {
            if (null != classz && classz.length > 0) {
                Class<?> class0 = classz[0];
                if(null != class0 && class0.isAnnotationPresent(DataSource.class)){
                    DataSource data = class0.getAnnotation(DataSource.class);
                    RouteHolder.setRouteKey(data.value());
                } else {
                    RouteHolder.setRouteKey("partition1");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
